 #include "os_cfg.h"
 	.text
 	.global _start
	.extern kernel_init
	.extern init_main
_start:
    push %ebp
    mov %esp, %ebp
    mov 8(%ebp), %eax
    push %eax
	call kernel_init

	// 重新加载GDT
	//这里实际上 已经更新了 gdt 表
	// jmp 选择子， 偏移
	jmp $KERNEL_SELECTOR_CS, $gdt_reload

// 这里实际上是 在更新各个选择子寄存器
gdt_reload:
	mov $KERNEL_SELECTOR_DS, %ax		// 16为数据段选择子
	mov %ax, %ds
    mov %ax, %ss
    mov %ax, %es
    mov %ax, %fs
    mov %ax, %gs

	// 栈设置
	mov $(stack + KERNEL_STACK_SIZE), %esp

	// 栈和段等沿用之前的设置
	jmp init_main

//设置bss 段。
// .comm  段名称， 大小
	.bss
.comm stack, KERNEL_STACK_SIZE    // comm 声明未初始化的通用内存区域，以字节计


	jmp .

